fun main() {
    val m = 3
    val n = 6
    val intArray = IntArray(m + n)
    /*Test1*/
//    intArray[0] = 4
    /*Test2*/
//    intArray[0] = -1
//    intArray[3] = 3
//    intArray[4] = 3
//    intArray[5] = 3
    /*Test3*/
    intArray[2] = 3
    /*Test4*/
//    intArray[0] = -1
//    intArray[1] = 3

    val intArray1 = IntArray(n)
    /*Test1*/
//    intArray1[0] = 1
//    intArray1[1] = 2
//    intArray1[2] = 3
//    intArray1[3] = 5
//    intArray1[4] = 6
    /*Test2*/
//    intArray1[0] = 1
//    intArray1[1] = 2
//    intArray1[2] = 2
    /*Test3*/
    intArray1[0] = -1
    intArray1[1] = 1
    intArray1[2] = 1
    intArray1[3] = 1
    intArray1[4] = 2
    intArray1[5] = 3
    /*Test4*/
//    intArray1[0] = 0
//    intArray1[1] = 0
//    intArray1[2] = 1
//    intArray1[3] = 2
//    intArray1[4] = 3
    e1(intArray, m, intArray1, n)

}

//给你两个按 非递减顺序 排列的整数数组nums1 和 nums2，另有两个整数 m 和 n ，分别表示 nums1 和 nums2 中的元素数目。
//请你 合并 nums2 到 nums1 中，使合并后的数组同样按 非递减顺序 排列。
//注意：最终，合并后数组不应由函数返回，而是存储在数组 nums1 中。为了应对这种情况，nums1 的初始长度为 m + n，其中前 m 个元素表示应合并的元素，后 n 个元素为 0 ，应忽略。nums2 的长度为 n 。
fun e1(nums1: IntArray, m: Int, nums2: IntArray, n: Int) {
    val start = System.currentTimeMillis()
    println(nums1.contentToString())
    println(nums2.contentToString())
    //            println("l:${nums1.contentToString()}")
//            println("l2:${nums2.contentToString()}")
    var m2 = m
    var isWhile: Boolean
    val numsSize = 0 until nums1.size
    for (index2 in 0 until nums2.size) {
        isWhile = true
        while (isWhile) {
            val i2 = nums2[index2]
            for (index in numsSize) {
                val i = nums1[index]
                if (i2 < i) {
                    nums1[index] = i2
                    nums2[index2] = i
                    break
                } else if (i == 0 && index >= m2) {
                    m2++
                    nums1[index] = i2
                    nums2[index2] = 0
                    isWhile = false
                    break
                }
            }
        }
    }
//    for (index2 in 0 until nums2.size) {
//        isWhile = true
//        while (isWhile) {
//            val i2 = nums2[index2]
//            for (index in numsSize) {
//                val i = nums1[index]
//                if (i2 < i) {
//                    nums1[index] = i2
//                    nums2[index2] = i
//                    break
//                } else if (i == 0 && index >= m2) {
//                    m2++
//                    nums1[index] = i2
//                    nums2[index2] = 0
//                    isWhile = false
//                    break
//                }
//            }
//        }
//    }
    println(nums1.contentToString())
    println(System.currentTimeMillis() - start)
}